package com.ymx.darling.bean.annotation;

import com.ymx.darling.type.DefaultTypeHandler;
import com.ymx.darling.type.TypeHandler;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 单表操作时作为实体类与表字段的对应关系
 * 多表查询时作为实体类与ResultSet结果集的元数据对应关系
 * @author 爱Java的小于
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    /**
     * 属性名与表中的字段名不相同时可以使用次注解重命名
     * @return String
     */
    String value() default "";

    /**
     * 是否忽略该字段 字段可能只是业务字段 不与表字段对应
     * @return 默认false
     */
    boolean ignore() default false;

    /**
     * 是否是版本号字段
     * @return 默认false
     */
    boolean isVersion() default false;

    /**
     * 是否为租户id字段
     * @return 默认false
     */
    boolean tenantId() default false;

    /**
     * 是否是逻辑删除字段
     * @return 默认false
     */
    boolean isLogicDelete() default false;

    /**
     * 设置脱敏类型 设置typeHandler属性后此选项无效
     * @return 默认不进行脱敏
     */
    String maskType() default "";

    /**
     * 自定义类型转换器的类型
     * @return typeHandler 缺省时由框架指定类型处理器
     */
    Class<? extends TypeHandler<?>> typeHandler() default DefaultTypeHandler.class;
}
